package fr.umlv.m2.uwp2011.persistence.matiere.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import fr.umlv.m2.uwp2011.persistence.matiere.Cursus;
import fr.umlv.m2.uwp2011.persistence.matiere.ITroncCommunDAO;
import fr.umlv.m2.uwp2011.persistence.matiere.Matiere;
import fr.umlv.m2.uwp2011.persistence.matiere.TroncCommun;

public class HibernateTroncCommunDAO implements ITroncCommunDAO{
	private static final Map<Long, TroncCommun> allTroncCommun = new HashMap<Long, TroncCommun>();
	private static final HibernateCursusDAO cursusDAO = new HibernateCursusDAO();
	private static final HibernateMatiereDAO matiereDAO = new HibernateMatiereDAO();

	private static final Map<String, List<TroncCommun>> mapUserTroncsCommuns = new HashMap<String, List<TroncCommun>>();

	static {
		TroncCommun tronc;
		//------ tronc commun with id 1 "logiciel" ----//
		Long tronc_id = 1L;
		tronc = new TroncCommun();
		tronc.setId(tronc_id);
		tronc.setLibelle("logiciel");
		
		List<Cursus> listCursus = new ArrayList<Cursus>();
		listCursus.add(cursusDAO.findById(1L));
		tronc.setListCursus(listCursus);

		List<Matiere> matieres = new ArrayList<Matiere>();
		matieres.add(matiereDAO.findById(1L));
		matieres.add(matiereDAO.findById(2L));
		tronc.setListMatiere(matieres);
		
		allTroncCommun.put(tronc_id, tronc);

		
		//------ tronc commun with id 2  ----//
		tronc_id = 2L;
		tronc = new TroncCommun();
		tronc.setId(tronc_id);
		tronc.setLibelle("reseaux");
		
		List<Cursus> listCursus2 = new ArrayList<Cursus>();
		listCursus2.add(cursusDAO.findById(1L));
		tronc.setListCursus(listCursus2);

		List<Matiere> matieres2 = new ArrayList<Matiere>();
		matieres2.add(matiereDAO.findById(1L));
		matieres2.add(matiereDAO.findById(3L));
		tronc.setListMatiere(matieres2);
		
		allTroncCommun.put(tronc_id, tronc);

		
		//------ tronc commun with id 3  ----//
		tronc_id = 3L;
		tronc = new TroncCommun();
		tronc.setId(tronc_id);
		tronc.setLibelle("siaw");
		
		List<Cursus> listCursus3 = new ArrayList<Cursus>();
		listCursus3.add(cursusDAO.findById(1L));
		tronc.setListCursus(listCursus3);

		List<Matiere> matieres3 = new ArrayList<Matiere>();
		matieres3.add(matiereDAO.findById(4L));
		tronc.setListMatiere(matieres);
		
		allTroncCommun.put(tronc_id, tronc);

		
		//------ tronc commun with id 4  ----//
		tronc_id = 4L;
		tronc = new TroncCommun();
		tronc.setId(tronc_id);
		tronc.setLibelle("linguistique");
		
		List<Cursus> listCursus4 = new ArrayList<Cursus>();
		listCursus4.add(cursusDAO.findById(2L));
		tronc.setListCursus(listCursus4);

		List<Matiere> matieres4 = new ArrayList<Matiere>();
		matieres4.add(matiereDAO.findById(5L));
		tronc.setListMatiere(matieres4);
		
		allTroncCommun.put(tronc_id, tronc);

		
		//------ tronc commun with id 5L  ----//
		tronc_id = 5L;
		tronc = new TroncCommun();
		tronc.setId(tronc_id);
		tronc.setLibelle("image");
		
		List<Cursus> listCursus5 = new ArrayList<Cursus>();
		listCursus5.add(cursusDAO.findById(2L));
		tronc.setListCursus(listCursus5);

		List<Matiere> matieres5 = new ArrayList<Matiere>();
		matieres5.add(matiereDAO.findById(6L));
		tronc.setListMatiere(matieres5);
		
		allTroncCommun.put(tronc_id, tronc);

		
		//------ tronc commun with id 6  ----//
		tronc_id = 6L;
		tronc = new TroncCommun();
		tronc.setId(tronc_id);
		tronc.setLibelle("algo");	
		List<Cursus> listCursus6 = new ArrayList<Cursus>();
		listCursus6.add(cursusDAO.findById(2L));
		listCursus6.add(cursusDAO.findById(3L));
		tronc.setListCursus(listCursus6);
		List<Matiere> matieres6 = new ArrayList<Matiere>();
		matieres6.add(matiereDAO.findById(7L));
		tronc.setListMatiere(matieres6);
		allTroncCommun.put(tronc_id, tronc);

		
		//------ tronc commun with id 7  ----//
		tronc_id = 7L;
		tronc = new TroncCommun();
		tronc.setId(tronc_id);
		tronc.setLibelle("statistiques");
		List<Cursus> listCursus7 = new ArrayList<Cursus>();
		listCursus7.add(cursusDAO.findById(3L));
		tronc.setListCursus(listCursus7);
		List<Matiere> matieres7 = new ArrayList<Matiere>();
		matieres7.add(matiereDAO.findById(7L));
		tronc.setListMatiere(matieres7);
		allTroncCommun.put(tronc_id, tronc);

		initUserTroncsCommuns();
	}

	private static void initUserTroncsCommuns() {
		List<TroncCommun> list;
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(1L));
		mapUserTroncsCommuns.put("etud1", list);
		
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(2L));
		list.add(allTroncCommun.get(3L));
		mapUserTroncsCommuns.put("etud2", list);
		
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(4L));
		mapUserTroncsCommuns.put("etud3", list);
		
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(4L));
		list.add(allTroncCommun.get(6L));
		mapUserTroncsCommuns.put("etud4", list);
		
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(5L));
		mapUserTroncsCommuns.put("etud5", list);
		
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(6L));
		mapUserTroncsCommuns.put("etud6", list);
		
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(7L));
		mapUserTroncsCommuns.put("etud7", list);
		
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(1L));
		list.add(allTroncCommun.get(2L));
		list.add(allTroncCommun.get(3L));
		list.add(allTroncCommun.get(6L));
		mapUserTroncsCommuns.put("prof1", list);
		
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(3L));
		mapUserTroncsCommuns.put("prof2", list);
		
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(5L));
		list.add(allTroncCommun.get(6L));
		mapUserTroncsCommuns.put("prof3", list);
		
		list = new ArrayList<TroncCommun>();
		list.add(allTroncCommun.get(7L));
		mapUserTroncsCommuns.put("prof4", list);
	}


	@Override
	public List<TroncCommun> findByUserID(String user_id) {
		return mapUserTroncsCommuns.get(user_id);
	}

	public TroncCommun findById(long id) {
		return allTroncCommun.get(id);
	}
}
